<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Remote Procedure Call</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Remote_Procedure_Call"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Remote_Procedure_Call rootpage-Remote_Procedure_Call skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Remote Procedure Call</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>Remote Procedure Call</b> (<b>RPC</b>; <a href="Englische_Sprache" title="Englische Sprache">englisch</a> für „Aufruf einer fernen Prozedur“) ist eine Technik zur Realisierung von <a href="Interprozesskommunikation" title="Interprozesskommunikation">Interprozesskommunikation</a>. Sie ermöglicht den Aufruf von <a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktionen</a> in anderen <a href="Adressraum#Adressraum_in_der_Informationstechnologie" title="Adressraum">Adressräumen</a>. Im Normalfall werden die aufgerufenen Funktionen auf einem anderen <a href="Computer" title="Computer">Computer</a> als das aufrufende Programm ausgeführt. Es existieren viele Implementierungen dieser Technik, die in der Regel untereinander nicht kompatibel sind.
</p>
<div class="mw-heading mw-heading2"><h2 id="Geschichte_und_Verbreitung">Geschichte und Verbreitung</h2></div>
<p>Der Grundgedanke von RPC wurde erstmals 1976 von James E. White im RFC 707 publiziert.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Eine der ersten Implementierungen ist <i>Xerox Courier</i>, das ein Teil des <i>Xerox Network Systems (XNS)</i> ist und auch in <a href="NetWare" title="NetWare">Novells Netware</a> benutzt wird.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Die Entwickler Andrew Birrell und <a href="Bruce_Nelson" title="Bruce Nelson">Bruce Nelson</a> erhielten dafür 1994 den <a href="ACM_Software_System_Award" title="ACM Software System Award">ACM Software System Award</a>. Der genaue Aufbau von RPC ist in RFC 1057<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> und RFC 5531<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> beschrieben.
</p><p>Die am weitesten verbreitete Variante ist das <i>ONC RPC (Open Network Computing Remote Procedure Call)</i>, das vielfach auch als Sun RPC bezeichnet wird. ONC RPC wurde ursprünglich durch <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a> für das <i><a href="Network_File_System" title="Network File System">Network File System</a> (NFS)</i> entwickelt. Für diese RPC-Variante findet sich unter anderem auch eine <a href="Implementierung" title="Implementierung">Implementierung</a> in <a href="Linux" title="Linux">Linux</a>.
</p><p>Die Implementierung <a href="Distributed_Computing_Environment" title="Distributed Computing Environment">Distributed Computing Environment Remote Procedure Call</a> (DCE RPC) ist ebenfalls weit verbreitet. Microsoft leitete Microsoft RPC (MSRPC) von der DCE RPC 1.1 Referenzimplementation ab. Auf dieser Grundlage wurde später <a href="Distributed_Component_Object_Model" title="Distributed Component Object Model">DCOM</a> implementiert. Die Erfahrungen aus DCOM flossen in <a href=".NET_Remoting" title=".NET Remoting">.NET Remoting</a> ein.
</p>
<div class="mw-heading mw-heading2"><h2 id="Ablauf">Ablauf</h2></div>
<p>RPC ist eine Möglichkeit, ein <a href="Client-Server-Modell" title="Client-Server-Modell">Client-Server-Modell</a> zu implementieren. Die Kommunikation beginnt, indem der Client eine Anfrage an einen bekannten Server schickt und auf die Antwort wartet. In der Anfrage gibt der Client an, welche Funktion mit welchen Parametern ausgeführt werden soll. Der Server bearbeitet die Anfrage und schickt die Antwort an den Client zurück. Nach Empfang der Nachricht kann der Client seine Verarbeitung fortführen.
</p><p>Beim Einsatz von RPC können durch Kommunikationsfehler unterschiedliche Fehlerkonstellationen auftreten, die beachtet und bearbeitet werden müssen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Funktionsweise">Funktionsweise</h2></div>
<p>Um eine fremde Prozedur aufzurufen, muss eine Nachricht vom Client-Prozess zum Server-Prozess versendet werden. In dieser müssen der Name der Prozedur (oder eine ID) und die zugehörigen Parameterwerte enthalten sein. Die Nachricht sollte letztlich bei einem Server-Prozess ankommen, der genau diese Prozedur implementiert (hierzu erforderlich beim Server: <i>register</i> (Bekanntmachung, Sicherstellen des öffentlichen Zugangs); hierzu erforderlich beim Client: <i>lookup</i> und <i>binding</i>).
</p><p>Die Suche nach einem entsprechenden Server kann durch <a href="Broadcast" title="Broadcast">Broadcast</a> (in einem lokalen Netz) realisiert werden oder durch Inanspruchnahme eines <a href="Verzeichnisdienst" title="Verzeichnisdienst">Verzeichnisdienstes</a>. (Der Verzeichnisdienst hält ein global verfügbares Objekt, genauer ein Verzeichnis von Servern und den von ihnen implementierten Prozeduren, bereit.)
</p><p>Die Suche und die Codierung, aber auch z. B. notwendige <a href="Rollback" title="Rollback">Recovery-Maßnahmen</a> (<i>error recoveries</i>) erledigt auf der Seite des Clients der <i>client stub</i>.
</p><p>Die wichtigste Komponente auf der Serverseite ist der <i><a href="Portmapper" title="Portmapper">Portmapper</a></i>-<a href="Daemon" title="Daemon">Daemon</a>, der bei ONC RPC auf dem <a href="User_Datagram_Protocol" title="User Datagram Protocol">UDP</a>- und <a href="Transmission_Control_Protocol" title="Transmission Control Protocol">TCP</a>-<a href="Port_(Netzwerkadresse)" title="Port (Netzwerkadresse)">Port</a> 111 lauscht; bei DCE RPC übernimmt diese Funktion der <i>Endpointmapper</i>, welcher auf dem UDP- und TCP-Port 135 lauscht. <i>Portmapper</i> resp. <i>Endpointmapper</i> übernehmen die Koordination der durch den Client gewünschten Funktionsaufrufe. Jedes Programm, das auf dem Server RPC-Dienste zur Verfügung stellen will, muss ihm daher bekannt sein.
</p><p>Wenn der Rechner, auf dem der Server-Prozess läuft, die Anfrage empfängt, so wird mit Hilfe des Portmappers entweder erst der Prozess erschaffen, der die Prozedur ausführt, oder alternativ kann ein Prozess auch nur aktiviert werden (in diesem Fall wird eine vordefinierte Anzahl von Prozessen bereitgehalten). Oder aber es wird ein neuer <a href="Thread_(Informatik)" title="Thread (Informatik)">Thread</a> erzeugt.
</p>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Common_Object_Request_Broker_Architecture" title="Common Object Request Broker Architecture">Common Object Request Broker Architecture</a> (CORBA) ist eine Möglichkeit zur Realisierung von RPC.</li>
<li><a href="Remote_Method_Invocation" title="Remote Method Invocation">Remote Method Invocation</a> (RMI) stellt einen RPC-Mechanismus für Java bereit.</li>
<li><a href="Remote_Function_Call" title="Remote Function Call">Remote Function Call</a> (RFC) ist die Implementierung von RPCs in SAP-Systemen.</li>
<li><a href="XML-RPC" title="XML-RPC">XML-RPC</a> ist ein RPC-Ableger, der auf XML-Dokumenten und http basiert.</li>
<li><a href="JSON-RPC" title="JSON-RPC">JSON-RPC</a> ist ein RPC-Ableger, der auf JSON-Dokumenten und http basiert.</li>
<li><a href="Webservice" title="Webservice">Webservices</a> können RPC als Architekturmuster nutzen.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup></li>
<li>weiteres: <a href="Hypertext_Transfer_Protocol" title="Hypertext Transfer Protocol">Hypertext Transfer Protocol</a> (HTTP), <a href="SOAP" title="SOAP">SOAP</a>, <a href="Representational_State_Transfer" title="Representational State Transfer">Representational State Transfer</a> (REST)</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li>Kapitel 9: <a rel="nofollow" class="external text" href="https://msdn.microsoft.com/de-de/library/dn151205.aspx"><i>Remote Procedure Call – RPC</i>.</a> microsoft.com Netzwerk-Know-how, tecCHANNEL COMPACT (deutsch)</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">James E. White: <i><a href="Request_for_Comments" title="Request for Comments">RFC</a>: <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */
.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}
/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a href="https://datatracker.ietf.org/doc/html/rfc707" class="extiw external" title="rfc:707">707</a></span></i> – <i><span lang="en">A High-Level Framework for Network-Based Resource Sharing</span></i>. 14. Januar 1976 (<i>Proceedings of the 1976 National Computer Conference</i>, englisch).</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">Andrew D. Birrell, Bruce Jay Nelson: <cite style="font-style:italic">Implementing Remote Procedure Calls</cite>. In: Xerox Palo Alto Research Center (Hrsg.): <cite style="font-style:italic">ACM Transactions on Computer Systems</cite>. <span style="white-space:nowrap">Band<span style="display:inline-block;width:.2em"> </span>2</span>, <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em"> </span>1</span>, 1984, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em"> </span>39–49</span> (<a rel="nofollow" class="external text" href="http://www.cs.cmu.edu/~dga/15-712/F07/papers/birrell842.pdf">cs.cmu.edu</a> [PDF]).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rfr_id=info:sid/de.wikipedia.org:Remote+Procedure+Call&rft.atitle=Implementing+Remote+Procedure+Calls&rft.au=Andrew+D.+Birrell%2C+Bruce+Jay+Nelson&rft.date=1984&rft.genre=journal&rft.issue=1&rft.jtitle=ACM+Transactions+on+Computer+Systems&rft.pages=39-49&rft.volume=2" style="display:none"> </span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Günther Bengel: <cite style="font-style:italic">Grundkurs verteilte Systeme</cite>. Vieweg und Teubner Verlag, 2005, ISBN 3-528-25738-5.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Remote+Procedure+Call&rft.au=G%C3%BCnther+Bengel&rft.btitle=Grundkurs+verteilte+Systeme&rft.date=2005&rft.genre=book&rft.isbn=3528257385&rft.pub=Vieweg+und+Teubner+Verlag" style="display:none"> </span></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><i><a href="Request_for_Comments" title="Request for Comments">RFC</a>: <span class="dewiki-iconexternal"><a href="https://datatracker.ietf.org/doc/html/rfc1057" class="extiw external" title="rfc:1057">1057</a></span></i> – <i><span lang="en">RPC: Remote Procedure Call Protocol Specification Version 2</span></i>. Juni 1988 (englisch).</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><i><a href="Request_for_Comments" title="Request for Comments">RFC</a>: <span class="dewiki-iconexternal"><a href="https://datatracker.ietf.org/doc/html/rfc5531" class="extiw external" title="rfc:5531">5531</a></span></i> – <i><span lang="en">RPC: Remote Procedure Call Protocol Specification Version 2</span></i>. September 2009 (englisch).</span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text">X. Feng, J. Shen, Y. Fan: <i>REST: An alternative to RPC for Web services architecture.</i> Future Information Networks 2009, ICFIN Conference, IEEE, S. 7–10, <a href="https://doi.org/10.1109/ICFIN.2009.5339611" class="extiw external" title="doi:10.1109/ICFIN.2009.5339611">doi:10.1109/ICFIN.2009.5339611</a>.</span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-04-03" href="https://de.wikipedia.org/wiki/?title=Remote_Procedure_Call&oldid=254809758">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>